package platzerworld.kegeln.gui.kegelauswahl;

import java.util.ArrayList;
import java.util.List;

import platzerworld.kegeln.R;
import platzerworld.kegeln.common.ConstantsIF;
import platzerworld.kegeln.common.sound.SoundManager;
import platzerworld.kegeln.common.style.StyleManager;
import platzerworld.kegeln.gui.ErgebnisAnlegen;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.InputType;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
 * KegelverwaltungSensor
 * 
 * @author platzerg
 */
public class ErgebnisEinzelAnlegen extends Activity implements ConstantsIF{

	/** Kuerzel fuers Logging. */
	private static final String TAG = ErgebnisEinzelAnlegen.class.getSimpleName();
	
	private TextView titeltext;
	
	private Wurf w;
	private int mWurfZwischenErgebnis=0;
	
	private Button mUebernehmenButton;
	private Button mAbbruchButton;
	private Button mBerechnenButton;
	
	private boolean checkboxPreferenceErgebnisManuell;
	private EditText edtzwischenErgebnis;
	
	public int mAnlageTyp = 0;
	public boolean isAbr;
	private int wertAbr = 0;
	private List<Integer> mBeforeWuerfe = new ArrayList<Integer>();
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ergebnis_einzel_anlegen);
        
        Bundle extras = getIntent().getExtras();
		if (extras == null) {
			return;
		}
		
		mAnlageTyp =  extras.getInt(INTENT_EXTRA_EINZEL_ANLEGEN);
		if( EINZEL_ANLEGEN_ABR251 == mAnlageTyp || EINZEL_ANLEGEN_ABR252 == mAnlageTyp ){
			isAbr = true;
		}
		init();
		
		SoundManager.getInstance();
        SoundManager.initSounds(this);
        SoundManager.loadSounds();
    }
    
    @Override
	protected void onStart() {
		super.onStart();
	}
	
	@Override
	protected void onDestroy() {
		cleanDatabase();
		SoundManager.cleanup();
		super.onDestroy();
	}
	
	@Override
	protected void onResume() {
		bindWidgets();
		
		super.onResume();
	}
	
	
	
	private void init(){
		initPreferences();
		w = new Wurf(this);
		initWidgets();
		initStyle();
		initListener();
		initContextMenu();
		initDatabase();
	}
	
	private void bindWidgets(){
		String titel = "";
		edtzwischenErgebnis.setText(String.valueOf(wertAbr));
		switch (mAnlageTyp) {
		case EINZEL_ANLEGEN_VOLL251:
			titel = getResources().getString(R.string.txt_ergebnis_neuanlegen_volle_50_1);
			break;
		case EINZEL_ANLEGEN_VOLL252:
			titel = getResources().getString(R.string.txt_ergebnis_neuanlegen_volle_50_2);
			break;
		case EINZEL_ANLEGEN_ABR251:
			titel = getResources().getString(R.string.txt_ergebnis_neuanlegen_abraeumen_50_1);
			break;
		case EINZEL_ANLEGEN_ABR252:
			titel = getResources().getString(R.string.txt_ergebnis_neuanlegen_abraeumen_50_2);
			break;
		default:
			break;
		}
		
		titeltext.setText(titel);
		
	}
	
	private void initStyle() {
		Typeface font = StyleManager.getInstance().init(this).getTypeface();
		titeltext.setTypeface(font);
	}
	
	private void initWidgets(){
		mUebernehmenButton = (Button) findViewById(R.id.sf_ergebnis_einzeln_neuanlagen_ok);
		mAbbruchButton = (Button) findViewById(R.id.sf_ergebnis_einzeln_neuanlagen_abbruch);
		mBerechnenButton = (Button) findViewById(R.id.sf_ergebnis_einzeln_neuanlagen_berechnen);
		
		titeltext = (TextView) findViewById(R.id.txt_ergebnis_einzel_neuanlegen_titel);
		
		edtzwischenErgebnis = (EditText) findViewById(R.id.wurf25zwischen);
		
		if(!checkboxPreferenceErgebnisManuell){
			edtzwischenErgebnis.setInputType(InputType.TYPE_NULL);
		}else{
			edtzwischenErgebnis.setInputType(InputType.TYPE_CLASS_NUMBER);
			edtzwischenErgebnis.setOnFocusChangeListener(new OnFocusChangeListener() {
				@Override
				public void onFocusChange(View v, boolean hasFocus) {
					if(hasFocus){
						Toast.makeText(ErgebnisEinzelAnlegen.this, "edtzwischenErgebnis hat Focus", Toast.LENGTH_SHORT).show();
						
					}
				}
			});
		}
		
		w.initWidgets();
	}
	
	private void initPreferences(){
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
		checkboxPreferenceErgebnisManuell = prefs.getBoolean("CHECK_ERGEBNIS_MANUELL_EINTRAGEN_PREF", true);
	}
	
	private void initListener(){	
		mUebernehmenButton.setOnClickListener(mErgebnisEinzelUebernehmenListener);
		mAbbruchButton.setOnClickListener(mErgebnisEinzelAbbruchListener);
		mBerechnenButton.setOnClickListener(mErgebnisEinzelBerechnenListener);
		
		w.initListener();
	}
	
	private void initContextMenu(){
	}
	
	private void initDatabase(){
	}
	
	private void cleanDatabase(){
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_WURF) {
			if (data.hasExtra(INTENT_EXTRA_WURF) && data.hasExtra(INTENT_EXTRA_WURF_WERT)
					&& data.hasExtra(INTENT_EXTRA_WURF_KEGEL)) {
				int selected = data.getExtras().getInt(INTENT_EXTRA_WURF);
				int wert = data.getExtras().getInt(INTENT_EXTRA_WURF_WERT);
				String wurf = data.getExtras().getString(INTENT_EXTRA_WURF_KEGEL);
				EditText editText = w.wuerfe[selected-1];
				
				if(null != editText){
					if(isAbr && selected > 1){
						wertAbr=wert;
						int before=0;
						for (int w : mBeforeWuerfe) {
							before+=w;
						}
						
						editText.setText(String.valueOf(wertAbr - before));
						
						mBeforeWuerfe.add( Integer.parseInt(w.wuerfe[selected-1].getText().toString()));
						if(wertAbr == 9){
							SoundManager.playSound(1, 1);
							mBeforeWuerfe = new ArrayList<Integer>();
						}
					}else{
						editText.setText(String.valueOf(wert));
						if(isAbr){
							mBeforeWuerfe.add( Integer.parseInt(w.wuerfe[selected-1].getText().toString()));
							wertAbr +=wert;
							if(wertAbr == 9){
								SoundManager.playSound(2, 1);
								mBeforeWuerfe = new ArrayList<Integer>();
							}
						}
					}
					
					checkResult(data.getExtras().getInt(INTENT_EXTRA_WURF), wurf, wert);
					
				}
				
			}
		}
	}
	
	private void checkResult(int selectedWurf, String kegelbild, int wert){
		w.letzteKegelbilder[selectedWurf-1] = kegelbild;
		
		if(wert == 9){
			w.showLastWurf(selectedWurf, wert, true);
		}else{
			w.showLastWurf(selectedWurf, wert, false);
		}
	}
	
	private final OnClickListener mErgebnisEinzelBerechnenListener = new OnClickListener() {
		public void onClick(View v) {
			berechnen();
		}
	};
	private void berechnen() {
		mWurfZwischenErgebnis = w.getZwischenErgebnis();
	}
	
	private final OnClickListener mErgebnisEinzelUebernehmenListener = new OnClickListener() {
		public void onClick(View v) {
			berechnen();
			uebernehmen();
		}
	};
	private void uebernehmen() {
		finish();
	}

	private final OnClickListener mErgebnisEinzelAbbruchListener = new OnClickListener() {
		public void onClick(View v) {
			cancel();
		}
	};
	
	private void cancel(){
		setResult(RESULT_CANCELED);
		super.finish();
	}
	
	
	@Override
	public void finish() {
		Intent data = new Intent();
		data.putExtra(INTENT_EXTRA_WURF_ZWISCHEN_ERGEBNIS, mWurfZwischenErgebnis);
		setResult(RESULT_OK, data);
		super.finish();
	}
	
	
}
